我們昨天已經把 main.go
的架構跟 fuzz test
放上去了
所以目前架構會長這樣
Project/
├── reverse_test.go
├── main.go
└── go.mod
go test -fuzz=Fuzz
這句指令的意思是 他會根據我們昨天說的 Seed Corpus
來生成隨機資料,並用於 Fuzzing Test裡面
假如你的 *.test.go
裡面有包含 Fuzzing 和 Unit Test,不加參數執行 go test
的話就是預設兩個都會執行
接著他就會開始執行 fuzzing
p.s 防毒軟體可能會把 Go 的 fuzz 執行擋擋掉
結果會跟下面這張圖類似
這時候你去觀察目錄,你會發現會變成下面這樣
Project/
├── testdata/
├── reverse_test.go
├── main.go
└── go.mod
testdata
的資料夾在當前目錄下,這個 testdata
裡面是我們的 Seed 檔,假如你測試失敗的話,他就會把導致錯誤的資料丟到裡面的檔案當中go test fuzz v1
string("ᓿ")
go test
且不帶參數,系統一樣會把這筆測資再測一次-fuzz
也會失敗有可能你跑 fuzzing 的結果會跟我不一樣,甚至直接 RUN SUCCESS,前面有講到說 seed 的選擇會跟 Fuzz 的效率有關,所以有可能只是 seed 選得不好而已,可以換幾組 Seed 再多跑幾次